import * as z from "zod";

import {
  valid_base_string,
  valid_public_id,
  valid_public_password,
  valid_public_phone,
} from "./core/index.ts";

/** 用户Id */
const _id = valid_public_id("用户Id");
/** 用户名 */
const username = valid_base_string("用户名", "3");
/** 密码 */
const password = valid_public_password();

/** 创建用户基本信息 */
const createUesrValid = z.object({
  /** 用户名 */
  username,
  /** 密码 */
  password,
  /** 手机号 */
  phone: valid_public_phone(),
  /** 昵称 */
  nickname: valid_base_string("昵称", "3"),
});
/** 更新用户基本信息 */
const updateUesrValid = createUesrValid.extend({
  /** id */
  _id,
});

export interface IUserCoreInfo extends z.infer<typeof createUesrValid> {}
export interface IReqCreateUser extends IUserCoreInfo {}
export interface IReqUpdateUser extends z.infer<typeof updateUesrValid> {}
export interface IRspUser extends IReqUpdateUser {}

/** 账号登陆 */
export const userLoginVaid = z.object({
  /** 用户名 */
  username,
  /** 密码 */
  password,
});
export interface IUserLogin extends z.infer<typeof userLoginVaid> {}

// 根据资源CURD操作需要，导出 create, update , delete 验证器
export default {
  // 导出用于资源通用操作验证的类型, 可以与 User.model.ts 的 action 配合使用
  create: createUesrValid,
  update: updateUesrValid,
  delete: _id,
};
